package com.haiyi.activiti.engine.framework.activiti.manager;

import com.haiyi.activiti.engine.model.entity.Process;
import org.activiti.engine.runtime.ProcessInstance;

import java.util.List;
import java.util.Map;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/12/5 15:46 </pre>
 *
 * @author hlu
 * @version 1.0
 * @since JDK 1.7
 */
public interface ProcessManager {

    /**
     * 流程id的前缀
     */
    String PROCESSID_PREFIX = "PROCESSID_";

    /**
     * 流程草稿状态
     */
    String PROCESS_STATUS_DRAFT = "0";
    /**
     * 流程正常使用状态
     */
    String PROCESS_STATUS_NORMAL = "1";
    /**
     * 流程修改状态
     */
    String PROCESS_STATUS_UPDATE = "2";
    /**
     * 流程禁用状态
     */
    String PROCESS_STATUS_DISABLE = "3";

    /**
     * activiti启动时候的入参：userID
     */
    String VAR_USER_ID = "userId";

    /**
     * activiti启动时候的入参：起始表单提交的数据
     */
    String VAR_START_FORM_DATA = "startFormData";

    /**
     * 查询所有的流程
     */
    List<Process> selectAll();

    void saveProcess(Process process);

    /**
     * 新增加updateProcess,分离工作流，工作图等功能。
     * @param processId
     */

    /**
     * 移除一个流程
     * @param processId
     */
    void removeProcess(String processId);

    /**
     * 开启一个流程
     * @param processId
     * @param variables
     * @return
     */
    ProcessInstance startProcess(String processId,Map<String,Object> variables);

    /**
     * 部署一个流程
     * @param processId   流程id
     * @param bpmXmlStr   bpm xml文本
     */
    void deploy(String processId,String bpmXmlStr);

    /**
     * 部署一个流程，注意：必须先关联好bpmn图，如果没有关联，将抛出ActivitiException
     * @param processId   流程id
     */
    void deploy(String processId);
}
